;****************** ( Program Test Second-Hand LCD ) ******************** ;1- P0.0 - P0.7 Connected to LCD Input For Data Pins ( D0 - D7 ) ;2- P2.0 Connected to LCD Input Data Pins ( RS ) ;3- P2.1 Connected to LCD Input Data Pins ( RW ) ;4- P2.2 Connected to LCD Input Data Pins ( E ) ;5- Write Bank R0 , R1 , R2 , R3 , R4 , R7 Accumlator A , B ; ORG 00 MOV P0,#00h ;Make Port P0 For Output MOV A,#38h ;Init LCD lines2 5*7 Matrix ACALL Command ;Call Command Subroutins Read ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#0Eh ;Display On Cursor LCD ( | ) ACALL Command ;Call Command Subroutins Read ACALL Delay2 ;Give lcd Some Call Time Delay2 MOV A,#01h ;Command Clear LCD ACALL Command ;Call Command Subroutins Read ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#06h ;Command cursor right (06h= shift) ACALL Command ;Call Command Subroutins Read ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#80h ;Command Cursor to ( Line 1 ) pos1 ACALL Command ;Call Command Subroutins Read ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#'T' ;Display Letter ( T ) ACALL Write ;Call Write Subroutins Display Data ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#'i' ;Display Letter ( i ) ACALL Write ;Call Write Subroutins Display Data ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#'m' ;Display Letter ( m ) ACALL Write ;Call Write Subroutins Display Data ACALL Delay2 ;Give Lcd Some Call Time Delay2 MOV A,#':' ;Display Letter ( : ) ACALL Write ;Call Write Subroutins Display Data ACALL Delay2 ;Give Lcd Some Call Time Delay2 STOP: RJMP STOP ;*********************** ( Send Command to LCD ) ************************ Command:MOV P0,A ;Send Accumlator A to ( PORT P0 ) CLR P2.0 ;Low Port P2.0 For Command ( RS=0 ) CLR P2.1 ;Low Port P2.1 For Command Write(RW=0) SETB P2.2 ;High Port P2.2 For Command Enable(E=1) ACALL Delay2 ;Give Lcd Some Call Time Delay2 CLR P2.2 ;Low Port P2.2 For Command Puls RET ;************************ ( Write Data to LCD ) ************************* Write: MOV P0,A ;Send Accumlator A to ( PORT P0 ) SETB P2.0 ;High Port P2.0 For Command ( RS=1 ) CLR P2.1 ;Low Port P2.1 For Command Write(RW=0) SETB P2.2 ;High Port P2.2 For Command Enable(E=1) ACALL Delay2 ;Give Lcd Some Call Time Delay2 CLR P2.2 ;Low Port P2.2 For Command Puls RET ;******************** ( Give LCD Some Time Delay2 ) ******************** Delay2: MOV R0,#150 ;Load Bank R0 For Momentum 150 Decimal Here2: MOV R7,#255 ;Load Bank R7 For Momentum 255 Decimal Here1: DJNZ R7,Here1 ;Time Momentum 255-000 Computable DJNZ R0,Here2 ;Time Momentum 150-000 Computable RET ;************************ ( Delay 1000 ms ) ***************************** Delay1: MOV TMOD,#10h ;Make Timer1 Mode1 ( 16-Bit ) MOV R0,#100 ;Counter For Multiple (1000 ms) Delay Back: MOV TL1,#0FFh ;TL1= FF hex , Low Byte Of Timer MOV TH1,#0DBh ;TH1= DB hex , High Byte Of Timer SETB TR1 ;Start The Timer1 , Counter Again: JNB TF1,Again ;Stay Until Timer1 Rolls Over CLR TR1 ;Stop Timer1 CLR TF1 ;Clear Timer1 Flag1 DJNZ R0,Back ;If R0 Notzero Then Jump to Back RET ;Return Subroutins , ACALL END